“—– Introducción a R - Plots —–”
“—– Introducción a R - Plots —–”
“Herramientas de análisis cuantitativo y su aplicación en la
conservación de la biodiversidad”
“Herramientas de análisis cuantitativo y su aplicación en la
conservación de la biodiversidad”
Ecodiversa Tropical
1. Objetivos de Aprendizaje
Al final de este taller, podrás aprender cómo:
- Definir el concepto de capas en un gráfico.
- Crear un “gráfico de caja” (box plot).
- Crear un “gráfico de dispersión” (scatter plot).
- Crear un diagrama de dispersión incluyendo una “línea de regresión” (linear regression).
- Crear un “histograma” (histograma).
- Crear un “gráfico de barras” (bar graph).
2. Para empezar
¿Que significa visualizar datos en una manera efectiva?
En este taller, vamos a hablar sobre cómo utilizar R para crear gráficos y visualizar datos. Pero primero, debemos entender qué significa visualizar datos de manera efectiva. Visualizar datos es el proceso en el que creamos representaciones visuales interesantes e influyentes para comunicar información específica de nuestros datos. El diseño juega un papel importante en la creación de gráficos notables que resuenen con nuestra audiencia.
Al decidir visualizar tus datos, es fundamental plantear preguntas sobre los datos y buscar respuestas mediante la modelación de los mismos. Cuando representamos datos de manera visual, es importante comunicar lo que los datos nos dicen de manera clara y en el tipo de gráfico apropiado que nuestra audiencia pueda entender. Una pregunta importante al decidir cómo representar los datos es pensar en cuál es la función de los mismos. Al tener esto en consideración, nos enfocamos en lo que queremos que la audiencia obtenga del gráfico.
¿Qué es necesario para crear gráficos en R?
R cuenta con varias funciones incorporadas para crear gráficos, pero también podemos utilizar paquetes creados por otros usuarios de R para acceder a más funciones. Al instalar un paquete, obtenemos acceso a todas las funciones desarrolladas por el usuario.
Para empezar, vamos a instalar el paquete ggplot2. Solo necesitas hacer esto una vez, ya que ggplot2 se guardará automáticamente en la sección “Packages” en RStudio. Utilizaremos este paquete para crear nuestros gráficos, ya que es el más efectivo para generar gráficos de alta calidad.
Cuando finalice la instalación del paquete, aparecerá un mensaje indicando que se ha instalado correctamente.
3. Capas
En la siguiente sección, vamos a discutir el concepto de capas y por qué es fundamental entender cómo funcionan al utilizar el paquete ggplot2(), un paquete basado en la idea de capas de código, para visualizar tus datos.
En primer lugar, la función ggplot2() contiene la base de datos y define las variables que deseas visualizar. Esta función trabaja junto con la función aes(), que describe las variables independientes y dependientes.
Con esta información en mente, vamos a explorar una serie de líneas de código y sus resultados para comprender cómo utilizar capas con varias funciones:
Código 1
¿Qué ocurre al ejecutar la línea de código anterior?
Código 2
parrot_clean <- read.csv("venezuelan_parrots.csv")
ggplot(data = parrot_clean, aes(x = species, y = abundance))
¿Qué ocurre al ejecutar la línea de código anterior?
Código 3
parrot_clean <- read.csv("venezuelan_parrots.csv")
ggplot(data = parrot_clean, aes(x = species, y = abundance)) +
geom_boxplot()
¿Qué ocurre al ejecutar la línea de código anterior?
¡Finalmente, tenemos un gráfico que visualiza la abundancia de diferentes especies de “pericos” en forma de un “gráfico de caja” utilizando los datos de “parrot_clean”! La línea de código anterior es el esqueleto básico para crear un gráfico en ggplot. En este ejemplo, creamos un “gráfico de caja” del cual hablaremos más en la siguiente sección. Tal vez hayas notado que cada vez que deseas agregar algo nuevo al gráfico, debes implementar otra función separada por el símbolo “+”. Cada sección separada por “+” se denomina capa.
Existen muchas otras funciones que pueden ser agregadas a tus gráficos utilizando capas.
Otra función importante que será útil para crear gráficos es
labs(). La función labs() te permite cambiar
los títulos de los ejes del gráfico a algo más informativo que los
nombres de las variables. En la siguiente línea de código,
labs() se añade a tu esqueleto básico del “gráfico de caja”
como una nueva capa:
Código 4
ggplot(data = parrot_clean, aes(x = species, y = abundance)) +
geom_boxplot() +
xlab("'Tipo de Cotoro' (Type of Parrot Species)") +
ylab("'Numero de Pericos' (Number of Parrots) ")Finalmente, es posible agregar un título general al gráfico
utilizando la función ggtitle(). Esta función también se
añade a tu esqueleto original para producir un gráfico final que sea
informativo y atractivo:
Código 5
ggplot(data = parrot_clean, aes(x = species, y = abundance)) +
geom_boxplot() +
xlab("'Tipo de Cotoro' (Type of Parrot Species)") +
ylab("'Numero de Pericos' (Number of Parrots) ") +
ggtitle("Different Types of Parrot Species")Imagina cada capa como una entidad separada que se encarga de controlar un aspecto de tu gráfico. El uso de capas permite dividir una línea de código que normalmente sería muy larga en piezas más digeribles. Continuamente se pueden agregar capas unas encima de otras para cambiar el gráfico a tu gusto. ¡No hay límite a lo que podrías lograr al crear con capas!
4. Grafico de Caja (box plot)
En la próxima parte del taller, continuaremos utilizando el paquete “ggplot2”, que instalamos previamente, para crear un “gráfico de caja” (box plot). Un “gráfico de caja” es una opción ideal cuando quieres visualizar una variable categórica y una variable continua. Este tipo de gráfico también proporciona información útil sobre un conjunto de datos, incluyendo la diferencia en distribución e identificación de valores atípicos.
En primer lugar, necesitamos cargar el paquete para poder utilizar sus funciones dentro de tu código. Debes completar este paso cada vez que desees usar este paquete en R
Además de cargar el paquete para utilizar sus funciones, recuerda que también necesitamos cargar los datos que queremos visualizar. En este taller, vamos a empezar visualizando los datos “parrot_clean” que utilizamos en la sección anterior. La estructura de datos “parrot_clean” describe la ocurrencia de ocho especies de pericos Amazónicos en Venezuela en 2010. Nota: Esta estructura de datos ha sido modificada para el propósito de este taller. En el próximo taller, “Manejo de Datos”, aprenderemos cómo limpiar datos de manera similar a cómo se modificó esta estructura.
Ahora, vamos a utilizar la línea de código de la sección anterior
para demostrar la función geom_boxplot() y visualizar
nuestros datos en forma de un “gráfico de caja”.
Como aprendimos en la sección anterior, cada vez que deseas agregar algo nuevo al gráfico, debes añadir una nueva capa separada por el símbolo “+”. Por lo tanto, vamos a ejecutar la siguiente línea de código para crear un “gráfico de caja”:
A partir del “gráfico de caja” resultante, podemos obtener conclusiones importantes sobre nuestro conjunto de datos “parrot_clean”. En primer lugar, observamos que la especie “A_amazonica” tiene una mediana más alta en comparación con las otras 4 especies de pericos. Sin embargo, también se observa que la especie “A_ochrocephala” presenta sitios con valores de abundancia más altos en comparación con las otras especies.
La primera función que utilizamos en esta línea de código es la
función de ggplot, de la cual hablamos en la sección anterior, y que
indica los argumentos que se aplican a todas las capas del gráfico. La
segunda función que utilizamos es geom_point(). Esta
función indica que queremos crear un gráfico de dispersión y define cómo
queremos disponer los datos en este gráfico.
5. Graficos de Dispersion (scatter plot)
Ahora, antes de comenzar nuestro análisis, vamos a visualizar la estructura de datos “polar_clean” utilizando el paquete “ggplot2”. Esta estructura simplificada proporciona información sobre la temperatura y la cantidad de clorofila para diferentes categorías de profundidad durante el crucero “Polarstern” en 2017. Las dos variables en las que estamos interesados son la “temperatura superficial promedio del agua” (temperature) y la “cantidad de clorofila” (chlorophyll) - ambas variables continuas que, al visualizarse juntas, crean un gráfico de dispersión.
Los gráficos de dispersión se pueden crear utilizando el comando
geom_point() en ggplot, como se muestra en la siguiente
línea de código:
polar_clean <- read.csv("polar_small.csv")
ggplot(data = polar_clean, aes(x = Temperature, y = Chlorophyll )) + geom_point()Al observar el gráfico resultante, se aprecia una correlación débil y negativa entre la “temperatura superficial promedio del agua” (temperature) y la “cantidad de clorofila” (chlorophyll). A partir del “gráfico de dispersión” (scatter plot), se podría concluir que a temperaturas más altas, se encuentran cantidades más bajas de clorofila.
5.1 Analisis de Regresion Lineal (linear regression)
Ya que hemos visualizado nuestros datos en forma de un “gráfico de
dispersión” (scatter plot), podemos realizar un “análisis de regresión
lineal” (linear regression) para examinar la relación entre la
“temperatura superficial promedio del agua” (temperature) y la “cantidad
de clorofila” (chlorophyll). Esta prueba se puede realizar utilizando la
función lm() en la siguiente línea de código:
Ahora que hemos completado el análisis, podemos agregar una línea de regresión a nuestro “gráfico de dispersión” (scatter plot) realizando una pequeña modificación a nuestro código anterior utilizado para crear el gráfico de dispersión simple.
ggplot(data = polar_clean, aes(x = Temperature, y= Chlorophyll)) +
geom_point() +
geom_smooth(method ='lm', se = FALSE)Al agregar la “línea de regresión” (regression line), nuestra conclusión anterior se confirma con la línea que muestra una pendiente negativa en el gráfico.
6. Histograma (histogram)
Ahora, vamos a aprender cómo visualizar nuestros datos en otra forma, utilizando un “histograma” (histograma) con nuestra estructura de datos “parrot_clean”.
Consejo:
Recuerda que cada vez que vuelvas a abrir R y desees utilizar el
paquete “ggplot2”, debes cargar el paquete utilizando la función
library().
Ahora que estamos listos para utilizar el paquete “ggplot2”, podemos crear nuestro histograma utilizando la siguiente línea de código:
En el histograma que hemos creado, se puede observar que hay más de 60 especies con una abundancia de 0 y un número menor de especies con abundancias más altas.
La primera función que utilizamos en la línea de código es la función
ggplot(). Esta parte del código no es nueva para nosotros,
ya que la hemos utilizado en cada código para crear gráficos. La segunda
función que utilizamos es la función geom_histogram(). Esta
función indica que queremos crear un histograma y especifica cómo
queremos visualizar los datos en el gráfico.
7. Grafico de Barras (bar graph)
Ahora, vamos a aprender el último gráfico que se puede crear en este taller: el “gráfico de barras” (bar graph). Al igual que en los gráficos anteriores, vamos a utilizar el paquete “ggplot2”, así que asegúrate de cargar el paquete si has vuelto a abrir R. Utiliza la siguiente línea de código:
El resultado de nuestro código es un “gráfico de barras” (bar graph) que muestra la abundancia de cada especie de perico. Se puede observar en el gráfico que la especie más abundante fue “A_ochrocephala” y la menos abundante fue “A_barbadensis”. Sin embargo, la especie “A_farinosa” estuvo cerca en abundancia de “A_barbadensis”.
8. Guardando tu grafico
Finalmente, para guardar el nuevo gráfico que hemos creado, hay dos métodos diferentes.
El primer método es hacer clic en el botón de exportar en la página del gráfico. Luego, selecciona el formato y la ubicación donde deseas guardar el gráfico.
El segundo método es mucho más fácil y se puede completar en dos pasos. Primero, asignamos el gráfico que hemos creado a un objeto. Vamos a asignar el histograma que creamos al objeto “histograma”:
Ahora, vamos a utilizar la función ggsave(). Necesitamos
incluir una ruta con el nombre del archivo donde queremos guardar
nuestro gráfico. En este caso, vamos a guardar nuestro gráfico
directamente en el escritorio:
Tips!
Si alguna vez te confundes sobre qué escribir como la ruta del
archivo donde deseas guardar tu gráfico, puedes utilizar la función
getwd() para obtener el formato correcto de tu ‘working
directory’ y utilizarlo en la función ggsave(). Solo
recuerda reemplazar todo antes de “/Desktop” con el símbolo “~” y
agregar “/‘el nombre de tu gráfico’.jpeg” al final de la ruta antes de
escribirlo en ggsave() para guardar tu gráfico directamente
en tu ‘working directory’.
9. Ayuda en la web
Algo importante que debemos reconocer al final de la parte instructiva de este taller es que la visualización de datos ha evolucionado y seguirá evolucionando. Este taller es solo una introducción básica a las posibilidades de visualización de datos.
A continuación, te proporciono algunas referencias relacionadas con la visualización de datos y cómo mejorar tus gráficos:
Relacionadas con Aumentar Gráficos:
A continuación, te presento unos ejercicios para poner en práctica lo aprendido:
Practica!
Ejercicio 1
Lee el archivo de ayuda para la función geom_histogram() en el paquete ggplot.
¿Qué hacen las diferentes partes de la siguiente línea de código? Completa los espacios en el diagrama utilizando la información del archivo de ayuda. Recuerda que el archivo de ayuda no te proporcionará instrucciones detalladas. Debes interpretar la información proporcionada y pensar en qué representan las diferentes partes del código.
¡Haz clic aquí para ver la solución!
A. Estructura de Datos
B. Nombre de la Columna
C. Estadístico para Contar Datos
D. Tamaño de las Líneas de Contorno
E. Número de Contenedores
F. Color de la Línea de Contorno
Ejercicio 2
Crea un histograma (histogram) utilizando la estructura de datos “polar”, que muestra la profundidad del agua en millas.
Nota: Ten en cuenta no confundir la estructura de datos “polar_clean” de las secciones anteriores con la estructura de datos “polar”. En este ejercicio, utilizarás la versión sin modificaciones.
Ejercicio 3
Crea un “gráfico de dispersión” (scatter plot) utilizando la estructura de datos “ratdat”, con el “peso” (weight) en el eje horizontal y la “longitud de la pata trasera (hindfoot length) en el eje vertical. El conjunto de datos”ratdat” es un paquete en R que recopila información del proyecto “Portal Project”, un estudio ecológico a largo plazo de plantas, ratones y hormigas en el sureste de Arizona, Estados Unidos.
Ejercicio 4
Construye un “gráfico de caja” (box plot) utilizando la estructura de datos del ejercicio anterior, “ratdat”, para visualizar el “sexo” (sex) en el eje horizontal y la “longitud de la pata trasera” (hindfoot length) en el eje vertical para la especie “merriami”.
Ejercicio 5a
En esta pregunta, vamos a practicar aplicando capas en ggplot utilizando el conjunto de datos “ATLANTIC_BATS_Study_site.csv”. Estos datos son una recopilación de información del 2017 sobre comunidades de murciélagos en 205 sitios del Bosque Atlántico en Brasil, Argentina y Paraguay. Vamos a crear un gráfico simple que muestre la variable “Altitud” (altitude) en el eje horizontal y la variable “Precipitación anual” (annual rainfall) en el eje vertical.
Haz clic aquí para solución!
Primero, carga “ATLANTIC_BATS_Study_site.csv” y el paquete “ggplot2”
en R como de costumbre. Asigna el nombre “bat_site” a la estructura de
datos y examina su estructura utilizando las funciones
str() y head().
## 'data.frame': 205 obs. of 19 variables:
## $ ID : chr "bat1001" "bat1002" "bat1003" "bat1004" ...
## $ Country : chr "Brazil" "Brazil" "Brazil" "Brazil" ...
## $ State : chr "SAO PAULO" "SANTA CATARINA" "RIO GRANDE DO NORTE" "RIO GRANDE DO SUL" ...
## $ Municipality : chr "CANANEIA" "BLUMENAU" "NISIA FLORESTA" "FREDERICO WESTPHALEN" ...
## $ Study_location : chr "Parque Estadual da Ilha do Cardoso" "Parque Natural Municipal Nascentes do Garcia" "Nisia Floresta National Forest" "Frederico Westphalen" ...
## $ Latitude : num -25.09 -27.06 -6.09 -27.36 -23.91 ...
## $ Longitude : num -47.9 -49.1 -35.2 -53.4 -52 ...
## $ Precision : chr "Not-Precise" "Not-Precise" "Precise" "Not-Precise" ...
## $ Reserve_Area : num 15100 5296 175 2 40 ...
## $ Altitude : chr "16" "460" "64" "554" ...
## $ Altitude1km : int 16 398 60 554 357 509 652 345 544 570 ...
## $ Annual_mean_temperature: num 22.6 18.5 25.6 19.1 20.9 22.9 18.6 20.7 22.6 20.4 ...
## $ Annual_rainfall : int 2487 1651 1329 1884 1489 1294 1737 1346 1355 1287 ...
## $ Olsong200r : chr "Atlantic Forests" "Atlantic Forests" "Atlantic Forests" "Atlantic Forests" ...
## $ Olsoneconame : chr "Serra do Mar coastal forests" "Serra do Mar coastal forests" "Atlantic Coast restingas" "Araucaria moist forests" ...
## $ ribeirovegtype : chr "Dense Ombrophilous Forest" "Dense Ombrophilous Forest" NA "Mixed Ombrophilous Forest" ...
## $ BSRs : chr "Serra do Mar" "Serra do Mar" "Pernambuco" "Florestas de Araucaria" ...
## $ uc : chr "Y" "Y" "Y" NA ...
## $ protectedtype : chr "Park" "Park" "Protected Forest" NA ...
## ID Country State Municipality
## 1 bat1001 Brazil SAO PAULO CANANEIA
## 2 bat1002 Brazil SANTA CATARINA BLUMENAU
## 3 bat1003 Brazil RIO GRANDE DO NORTE NISIA FLORESTA
## 4 bat1004 Brazil RIO GRANDE DO SUL FREDERICO WESTPHALEN
## 5 bat1005 Brazil PARANA FENIX
## 6 bat1006 Brazil SAO PAULO SAO JOSE DO RIO PRETO
## Study_location Latitude Longitude Precision
## 1 Parque Estadual da Ilha do Cardoso -25.086853 -47.92796 Not-Precise
## 2 Parque Natural Municipal Nascentes do Garcia -27.060000 -49.08000 Not-Precise
## 3 Nisia Floresta National Forest -6.086251 -35.18493 Precise
## 4 Frederico Westphalen -27.361897 -53.40998 Not-Precise
## 5 Sitios de Fenix Parana -23.909721 -51.95838 Not-Precise
## 6 Talhadinho -20.702213 -49.30106 Not-Precise
## Reserve_Area Altitude Altitude1km Annual_mean_temperature Annual_rainfall
## 1 15100.00 16 16 22.6 2487
## 2 5296.16 460 398 18.5 1651
## 3 174.95 64 60 25.6 1329
## 4 2.00 554 554 19.1 1884
## 5 40.00 354 357 20.9 1489
## 6 8.00 524 509 22.9 1294
## Olsong200r Olsoneconame ribeirovegtype
## 1 Atlantic Forests Serra do Mar coastal forests Dense Ombrophilous Forest
## 2 Atlantic Forests Serra do Mar coastal forests Dense Ombrophilous Forest
## 3 Atlantic Forests Atlantic Coast restingas <NA>
## 4 Atlantic Forests Araucaria moist forests Mixed Ombrophilous Forest
## 5 Atlantic Forests Alto Parana Atlantic forests Semideciduous Forest
## 6 Atlantic Forests Alto Parana Atlantic forests Semideciduous Forest
## BSRs uc protectedtype
## 1 Serra do Mar Y Park
## 2 Serra do Mar Y Park
## 3 Pernambuco Y Protected Forest
## 4 Florestas de Araucaria <NA> <NA>
## 5 Interior Forests <NA> <NA>
## 6 Interior Forests <NA> <NA>
Segundo, escribe el esqueleto básico de tu gráfico. Esta es la capa que indica qué datos estás utilizando y cuáles serán tus variables.
Luego, agrega la segunda capa de tu gráfico, separándola con el
símbolo “+”. Esta capa indica cómo quieres que tus datos sean
representados. En este caso, queremos que los datos sean visualizados en
forma de “gráfico de dispersión” (scatter plot) y debemos usar la
función geom_point().
Ejercicio 5b
Ahora, utilizando los resultados de la parte (a), ejecuta una “regresión lineal” (linear regression) y visualiza la relación en el gráfico que generamos en el ejercicio anterior.
Haz clic aquí para solución!
ggplot(data = bat_site , aes(x = `Altitude1km`, y = `Annual_rainfall`)) + geom_point() + geom_smooth(method = "lm") + scale_x_log10() + scale_y_log10()Tips!
En la línea de código anterior, observa que utilizamos dos funciones nuevas:
scale_x_log10() - para escalar el eje vertical
utilizando el logaritmo en base 10.
scale_y_log10() - para escalar el eje horizontal
utilizando el logaritmo en base 10.
Al utilizar estas funciones, podemos distribuir los datos de una manera más precisa y corregir la asimetría entre los datos.
Ejercicio 6
En este ejercicio, utiliza la estructura de datos asignada con el nombre “bat_site” del ejercicio anterior para construir un “gráfico de barras” (bar graph) visualizando el número de ocurrencias registradas para cada estado.
Ejercicio 7
Continuando con la misma estructura de datos, “bat_site”, crea un “gráfico de caja” (box plot) que visualice la variable categórica “estado” (state) en el eje horizontal y la variable numérica “área de reserva” (reserve area) en el eje vertical.
Haz clic aquí para solución!
ggplot(data = bat_site, aes(x = State , y = Reserve_Area)) + geom_boxplot() + theme(axis.text = element_text(angle = 90)) library(cowplot)
ggplot(data = bat_site, aes(x = State , y = Reserve_Area)) + geom_boxplot() + theme_cowplot() + theme(axis.text = element_text(angle = 90))Tips!
En la línea de código anterior, debes tener en cuenta que hemos introducido otras dos funciones nuevas que pueden mejorar nuestros gráficos:
theme_cowplot() - elimina los bordes en el gráfico.
theme(axis.text = element_text(angle = 90)) - cambia la
orientación de los nombres en el eje vertical en 90 grados para hacerlos
más legibles en el gráfico.
Información!
Cuando escribas código en R y utilices estas funciones para mejorar
tus gráficos, es importante tener en cuenta el orden. En este ejercicio,
es importante incluir la función theme_cowplot() antes de
theme(axis.text = element_text(angle = 90)) porque primero
queremos eliminar los bordes antes de cambiar la orientación de los
nombres en el eje vertical.
Ejercicio 8
Lee el archivo de ayuda para geom_smooth() en el paquete “ggplot2”. Completa las líneas en el siguiente gráfico con la función de cada argumento en la línea de código. Nota: Utiliza la información en “usage” y “arguments”.
Haz clic aquí para solución!
A. Estructura de Datos
B. Fórmula para uso en la función
C. Color de la Línea de Contorno
D. Tipo/Tamano de la Línea de Contorno
E. Función para uso en el método de la Linea de Contorno
F. ¿Quieres un intervalo de confianza?